package co.inventario.datos.sqlserver;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import co.inventario.entidad.InsumoDTO;
import co.inventario.entidad.PedidoVentaDTO;
import co.inventario.entidad.PedidoVentaInsumoDTO;

public class PedidoVentaInsumoDAOSQLServer {

	private String crearSQL;
	private String actualizarSQL;
	private String consultarSQL;

	public PedidoVentaInsumoDAOSQLServer() {
		crearSQL = "";
		actualizarSQL = "";
		consultarSQL = "";
	}

	public void crear(PedidoVentaInsumoDTO pedidoVentaInsumoDTO, Connection connection) throws SQLException {
		crearSQL = "INSERT INTO PedidoVenta_Insumo (In_Consecutivo_PedidoVenta_Insumo, In_Codigo_PedidoVenta, In_Codigo_Insumo, Dc_Cantidad_PedidoVenta, Dc_Descuento_Pedido_Venta) VALUES (?, ?, ?, ?, ?)";
		try (PreparedStatement preparedStatement = connection.prepareStatement(crearSQL)) {
			preparedStatement.setInt(1, pedidoVentaInsumoDTO.getInConsecutivoPedidoVentaInsumo());
			preparedStatement.setInt(2, pedidoVentaInsumoDTO.getPedidoVentaDTO().getInCodigoPedidoVenta());
			preparedStatement.setInt(3, pedidoVentaInsumoDTO.getInsumoDTO().getInCodigoInsumo());
			preparedStatement.setDouble(4, pedidoVentaInsumoDTO.getDcCantidadPedidoVentaInsumo());
			preparedStatement.setDouble(5, pedidoVentaInsumoDTO.getDcDescuentoPedidoVentaInsumo());
			preparedStatement.executeUpdate();
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema creando el Pedido venta x Insumo: " + exception.getMessage());
		}
	}

	public void actualizar(PedidoVentaInsumoDTO pedidoVentaInsumoDTO, Connection connection) throws SQLException {
		actualizarSQL = "UPDATE PedidoVenta_Insumo SET In_Codigo_PedidoVenta = ISNULL(?, In_Codigo_PedidoVenta), In_Codigo_Insumo = ISNULL(?, In_Codigo_Insumo), Dc_Cantidad_PedidoVenta = ISNULL(?, Dc_Cantidad_PedidoVenta), Dc_Descuento_Pedido_Venta = ISNULL(?, Dc_Descuento_Pedido_Venta) WHERE In_Codigo_PedidoVenta_Insumo = ?";
		try (PreparedStatement preparedStatement = connection.prepareStatement(actualizarSQL)) {
			preparedStatement.setInt(1, pedidoVentaInsumoDTO.getPedidoVentaDTO().getInCodigoPedidoVenta());
			preparedStatement.setInt(2, pedidoVentaInsumoDTO.getInsumoDTO().getInCodigoInsumo());
			preparedStatement.setDouble(3, pedidoVentaInsumoDTO.getDcCantidadPedidoVentaInsumo());
			preparedStatement.setDouble(4, pedidoVentaInsumoDTO.getDcDescuentoPedidoVentaInsumo());
			preparedStatement.setInt(5, pedidoVentaInsumoDTO.getInCodigoPedidoVentaInsumo());
			preparedStatement.executeUpdate();
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema actualizando el Pedido venta x Insumo: " + exception.getMessage());
		}
	}

	public PedidoVentaInsumoDTO consultarPorCodigo(PedidoVentaInsumoDTO pedidoVentaInsumoDTO, Connection connection) throws SQLException {
		consultarSQL = "SELECT * FROM PedidoVenta_Insumo WHERE In_Codigo_PedidoVenta_Insumo = ?";
		PedidoVentaInsumoDTO pedidoVentaInsumoDTOResultado = null;
		PedidoVentaDTO pedidoVentaDTO = null;
		InsumoDTO insumoDTO = null;
		try (PreparedStatement preparedStatement = connection.prepareStatement(consultarSQL)) {
			preparedStatement.setInt(1, pedidoVentaInsumoDTO.getInCodigoPedidoVentaInsumo());
			try (ResultSet resultSet = preparedStatement.executeQuery()) {
				if (resultSet.next() == true) {
					pedidoVentaInsumoDTOResultado = new PedidoVentaInsumoDTO();
					pedidoVentaInsumoDTOResultado.setInCodigoPedidoVentaInsumo(resultSet.getInt("In_Codigo_PedidoVenta_Insumo"));
					pedidoVentaInsumoDTOResultado.setInConsecutivoPedidoVentaInsumo(resultSet.getInt("In_Consecutivo_PedidoVenta_Insumo"));
					pedidoVentaDTO = new PedidoVentaDTO();
					pedidoVentaDTO.setInCodigoPedidoVenta(resultSet.getInt("In_Codigo_PedidoVenta"));
					pedidoVentaInsumoDTOResultado.setPedidoVentaDTO(pedidoVentaDTO);
					insumoDTO = new InsumoDTO();
					insumoDTO.setInCodigoInsumo(resultSet.getInt("In_Codigo_Insumo"));
					pedidoVentaInsumoDTOResultado.setInsumoDTO(insumoDTO);
					pedidoVentaInsumoDTOResultado.setDcCantidadPedidoVentaInsumo(resultSet.getDouble("Dc_Cantidad_PedidoVenta"));
					pedidoVentaInsumoDTOResultado.setDcDescuentoPedidoVentaInsumo(resultSet.getDouble("Dc_Descuento_Pedido_Venta"));
				}
			}
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema consultando el Pedido venta x Insumo a traves del codigo: " + exception.getMessage());
		}
		return pedidoVentaInsumoDTOResultado;
	}

	public PedidoVentaInsumoDTO consultarPorConsecutivo(PedidoVentaInsumoDTO pedidoVentaInsumoDTO, Connection connection) throws SQLException {
		consultarSQL = "SELECT * FROM PedidoVenta_Insumo WHERE In_Consecutivo_PedidoVenta_Insumo = ?";
		PedidoVentaInsumoDTO pedidoVentaInsumoDTOResultado = null;
		PedidoVentaDTO pedidoVentaDTO = null;
		InsumoDTO insumoDTO = null;
		try (PreparedStatement preparedStatement = connection.prepareStatement(consultarSQL)) {
			preparedStatement.setInt(1, pedidoVentaInsumoDTO.getInConsecutivoPedidoVentaInsumo());
			try (ResultSet resultSet = preparedStatement.executeQuery()) {
				while (resultSet.next() == true) {
					pedidoVentaInsumoDTOResultado = new PedidoVentaInsumoDTO();
					pedidoVentaInsumoDTOResultado.setInCodigoPedidoVentaInsumo(resultSet.getInt("In_Codigo_PedidoVenta_Insumo"));
					pedidoVentaInsumoDTOResultado.setInConsecutivoPedidoVentaInsumo(resultSet.getInt("In_Consecutivo_Pedido_Insumo"));
					pedidoVentaDTO = new PedidoVentaDTO();
					pedidoVentaDTO.setInCodigoPedidoVenta(resultSet.getInt("In_Codigo_PedidoVenta"));
					pedidoVentaInsumoDTOResultado.setPedidoVentaDTO(pedidoVentaDTO);
					insumoDTO = new InsumoDTO();
					insumoDTO.setInCodigoInsumo(resultSet.getInt("In_Codigo_Insumo"));
					pedidoVentaInsumoDTOResultado.setInsumoDTO(insumoDTO);
					pedidoVentaInsumoDTOResultado.setDcCantidadPedidoVentaInsumo(resultSet.getDouble("Dc_Cantidad_PedidoVenta"));
					pedidoVentaInsumoDTOResultado.setDcDescuentoPedidoVentaInsumo(resultSet.getDouble("Dc_Descuento_Pedido_Venta"));
				}
			}
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema consultando el Pedido venta x Insumo a traves del consecutivo: " + exception.getMessage());
		}
		return pedidoVentaInsumoDTOResultado;
	}

	public ArrayList<PedidoVentaInsumoDTO> consultarTodo(Connection connection) throws SQLException {
		consultarSQL = "SELECT * FROM PedidoVenta_Insumo";
		PedidoVentaInsumoDTO pedidoVentaInsumoDTOResultado = null;
		PedidoVentaDTO pedidoVentaDTO = null;
		InsumoDTO insumoDTO = null;
		ArrayList<PedidoVentaInsumoDTO> pedidoVentaInsumoDTOLista = null;
		pedidoVentaInsumoDTOLista = new ArrayList<PedidoVentaInsumoDTO>();
		try (PreparedStatement preparedStatement = connection.prepareStatement(consultarSQL)) {
			try (ResultSet resultSet = preparedStatement.executeQuery()) {
				while (resultSet.next() == true) {
					pedidoVentaInsumoDTOResultado = new PedidoVentaInsumoDTO();
					pedidoVentaInsumoDTOResultado.setInCodigoPedidoVentaInsumo(resultSet.getInt("In_Codigo_PedidoVenta_Insumo"));
					pedidoVentaInsumoDTOResultado.setInConsecutivoPedidoVentaInsumo(resultSet.getInt("In_Consecutivo_PedidoVenta_Insumo"));
					pedidoVentaDTO = new PedidoVentaDTO();
					pedidoVentaDTO.setInCodigoPedidoVenta(resultSet.getInt("In_Codigo_PedidoVenta"));
					pedidoVentaInsumoDTOResultado.setPedidoVentaDTO(pedidoVentaDTO);
					insumoDTO = new InsumoDTO();
					insumoDTO.setInCodigoInsumo(resultSet.getInt("In_Codigo_Insumo"));
					pedidoVentaInsumoDTOResultado.setInsumoDTO(insumoDTO);
					pedidoVentaInsumoDTOResultado.setDcCantidadPedidoVentaInsumo(resultSet.getDouble("Dc_Cantidad_PedidoVenta_Insumo"));
					pedidoVentaInsumoDTOResultado.setDcDescuentoPedidoVentaInsumo(resultSet.getDouble("Dc_Descuento_PedidoVenta_Insumo"));
					pedidoVentaInsumoDTOLista.add(pedidoVentaInsumoDTOResultado);
				}
			}
		} catch (SQLException exception) {
			System.err.println("Se ha presentado un problema consultando todos los Pedidos venta x Insumo : " + exception.getMessage());
		}
		return pedidoVentaInsumoDTOLista;
	}
}
